阿里云RTC的基本功能包含初始化SDK、加入频道、本地发布、订阅远端和离开频道等。通过阅读本文,您可以了解阿里云RTC的基本功能。
前提条件
操作步骤
初始化SDK。
您需要创建DingRtcEngine实例,并注册回调。如果您在ViewController中持有DingRtcEngine实例,请声明属性。具体回调接口请参见回调及监听。
@interface ViewController () <DingRtcEngineDelegate> @property (nonatomic, strong) DingRtcEngine *engine; @end
self.engine = [DingRtcEngine sharedInstance:self extras:@""];
本地预览。在创建完DingRtcEngine实例后,您可以创建canvas布局进行本地预览视频。
DingRtcVideoCanvas *canvas = [[DingRtcVideoCanvas alloc] init]; canvas.renderMode = DingRtcRenderModeAuto; canvas.view = view; /* 预览窗口view,iOS为UIView对象,Mac为NSView对象*/ canvas.mirrorMode = DingRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled; [self.engine setLocalViewConfig:canvas forTrack:DingRtcVideoTrackCamera]; [self.engine startPreview];
说明DingRtcRenderMode提供四种渲染模式:
DingRtcRenderModeAuto(推荐):自动。
DingRtcRenderModeStretch:拉伸填充视图,不保持视频比例。
DingRtcRenderModeFill:在保持视频宽高比的同时缩放,填充黑边。
DingRtcRenderModeCrop:在保持视频宽高比的同时缩放,并裁剪以适合视图。
DingRtcRenderMirrorMode在本地或远端均可设置镜像模式,并提供三种镜像模式:
DingRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled:只有前置摄像头预览镜像,其余不镜像。
DingRtcRenderMirrorModeAllEnabled:全部镜像。
DingRtcRenderMirrorModeAllDisabled:全部不镜像。
可选:取消本地预览。
[self.engine stopPreview];
设置发布与订阅。
SDK默认入会后不会自动发布音频流与视频流,如果您希望自动发布音频和视频,可以在入会前通过以下接口设置:
[self.engine publishLocalAudioStream:YES];//默认发布音频流 [self.engine publishLocalVideoStream:YES];//默认发布视频流
SDK默认入会后自动订阅远端的音频流与视频流,如果您不希望自动订阅音频与视频,可以在入会前通过以下接口设置:
[self.engine subscribeAllRemoteAudioStreams:NO];//不订阅音频流 [self.engine subscribeAllRemoteVideoStreams:NO];//不订阅视频流
加入频道。
DingRtcAuthInfo *authinfo = [[DingRtcAuthInfo alloc]init]; authinfo.channelId = /* 您的channelId */; authinfo.appId = /* 您的Appid */; authinfo.userId = /* 您的userId */; authinfo.token = /* 您的token */; authinfo.gslbServer = /* 您的gslb地址 */; [self.engine joinChannel:authinfo name:@"userName" onResult:^(NSInteger errCode,NSString * _Nonnull channel,NSInteger elapsed){ // 加入频道UI处理 }];
参数
描述
appId
应用ID,在控制台应用管理页面创建和查看。
channelId
频道ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
userId
用户ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
说明同一个用户ID在其他端登录,先入会的端会被后入会的端踢出频道。
token
频道鉴权令牌。
gslbServer
服务地址,可为空,默认值为:
"https://gslb.dingrtc.com"
,请您通过业务服务器下发到客户端SDK,不建议您将该地址固化在客户端代码。发布或取消发布本地流。
发布本地音频流和视频流
如果您在入会前没有设置发布音频流和视频流,则入会后不会自动发布本地的音频流和视频流,需要调用以下接口进行手动发布:
[self.engine publishLocalAudioStream:YES];//发布音频流 [self.engine publishLocalVideoStream:YES];//发布视频流
取消发布本地音频流和视频流
如果您需要取消发布本地的音频流和视频流,请调用以下接口:
[self.engine publishLocalAudioStream:NO];//取消发布音频流 [self.engine publishLocalVideoStream:NO];//取消发布视频流
订阅或取消订阅远程流。
订阅远端音频流和视频流
如果您在入会前没有设置订阅音频流和视频流,则入会后会自动订阅远端的音频流和视频流;如果您在入会前设置取消订阅音频流和视频流,则入会后需要调用以下接口进行手动订阅:
[self.engine subscribeAllRemoteAudioStreams:YES];//订阅全部的远端音频流 [self.engine subscribeAllRemoteVideoStreams:YES];//订阅全部的远端视频流
订阅成功后,您可以在onRemoteTrackAvailableNotify回调里渲染远端的视频画面:
- (void)onRemoteTrackAvailableNotify:(NSString *_Nonnull)uid audioTrack:(DingRtcAudioTrack)audioTrack videoTrack:(DingRtcVideoTrack)videoTrack { dispatch_async(dispatch_get_main_queue(), ^{ // UI或者逻辑处理,例如渲染远端视频流的操作如下。 if(videoTrack == DingRtcVideoTrackCamera) { // camera track DingRtcVideoCanvas *canvas = [[DingRtcVideoCanvas alloc] init]; canvas.renderMode = /* renderMode */; canvas.view = view;/* 渲染view */ [self.engine setRemoteViewConfig:canvas uid:uid forTrack:DingRtcVideoTrackCamera]; } }); }
取消订阅远端音频流和视频流
如果您需要取消订阅远端的音频流和视频流,请调用以下接口:
[self.engine subscribeAllRemoteAudioStreams:NO];//取消订阅全部的远端音频流 [self.engine subscribeAllRemoteVideoStreams:NO];//取消订阅全部的远端视频流
订阅特定用户的音频流和视频流
当已取消订阅所有的音频流和视频流之后,如果您需要订阅某个远端用户的音频流和视频流,可以通过调用以下接口实现(如果需要取消订阅此远端用户的音频流和视频流,参数sub传入NO即可):
[self.engine subscribeRemoteAudioStream:uid sub:YES];//订阅特定用户的音频流 [self.engine subscribeRemoteVideoStream:uid track:DingRtcVideoTrackCamera sub:YES];//订阅特定用户的视频流
订阅不同规格相机流
如果您需要订阅流畅规格相机流,请调用以下接口:
[self.engine setRemoteDefaultVideoStreamType:DingRtcVideoStreamTypeLD];
说明 此接口作用于后续入会的远端用户,对于调用此接口之前已经入会的远端用户,此接口不产生影响。取消订阅所有远端用户音频流和视频流
如果您希望当前会议中及后续入会的用户全部取消订阅,请调用以下接口:
[self.engine subscribeAllRemoteAudioStreams:NO]; [self.engine subscribeAllRemoteVideoStreams:NO];
离开频道。
[self.engine leaveChannel];
后续步骤
您可以下载示例代码,快速运行Demo,实现频道内和其他人进行实时音视频通话,详情请参见运行 iOS Demo。